/*
 * @Author: boboji11 wendychen112@qq.com
 * @Date: 2025-09-20 15:22:45
 * @LastEditors: boboji11 wendychen112@qq.com
 * @LastEditTime: 2025-09-20 17:11:00
 * @FilePath: \homework1\led.c
 * @Description: 
 * 
 * Copyright (c) 2025 by boboji11 , All Rights Reserved. 
 */
/*
 这份代码是通过P2端口控制LED灯。程序开始是一个LED的流水灯，
 当流水灯达到末端时会增长流水灯的长度，循环往复，直到长度为5的流水灯抵达它的末端。
 最后是LED灯的闪烁

 不同长度的流水灯的频率不同，长度小的流水灯频率较快，长度大的流水灯频率较慢。
 */

#include "led.h"
#include<reg52.h>
// sbit D1 = P2^0;
void delay_ms(unsigned int ms);
unsigned char led_array[10];
void main()
{
	unsigned char code led_array_1[] = {
		0xFE, // 11111110 
		0xFD, // 11111101
		0xFB, // 11111011 
		0xF7, // 11110111
		0xEF, // 11101111 
		0xDF, // 11011111 
		0xBF, // 10111111
		0x3F  // 00111111 
	};
	unsigned char code led_array_2[] = {
		0xF8,  // 11111000
		0xF9, // 11111001
		0xF3, // 11110011
		0xE7, // 11100111
		0xCF, // 11001111
		0x9F, // 10011111
		0x3F  // 00111111 
	};
	unsigned char code led_array_3[] = {
		0x0F, //  00001111
		0x8F, //  10001111
		0xC7, //  11000111
		0xE3, //  11100011
		0xF1, //  11110001
		0xF8  //  11111000
	};
	unsigned char code led_array_4[] = {
		0x0F, //  00001111 
		0x87, //  10000111
		0xC3, //  11000011
		0xE1, //  11100001
		0xE0, //  11100000 
	};
	unsigned char code led_array_5[] = {
		0xE0, // 11100000 
		0xC1, // 11000001
		0x83, // 10000011
		0x07, // 00000111
	};
	unsigned char code led_array_shine[] = {
		0x55, // 01010101
		0xAA  // 10101010
	};
	unsigned char led_array_1_len = sizeof(led_array_1)/sizeof(led_array_1[0]);
	unsigned char led_array_2_len = sizeof(led_array_2)/sizeof(led_array_2[0]);
	unsigned char led_array_3_len = sizeof(led_array_3)/sizeof(led_array_3[0]);
	unsigned char led_array_4_len = sizeof(led_array_4)/sizeof(led_array_4[0]);
	unsigned char led_array_5_len = sizeof(led_array_5)/sizeof(led_array_5[0]);
	unsigned char led_array_shine_len = sizeof(led_array_shine)/sizeof(led_array_shine[0]);
	char i = 0;
	char j = 0;
	// for 1
	for(i=0;i<led_array_1_len;i++) {
		P2 = led_array_1[i];
		delay_ms(150);
	}
	// for 2
	for(i=0;i<led_array_2_len;i++) {
		P2 = led_array_2[led_array_2_len-1-i];
		delay_ms(250);
	}
	// for 3
	for(i=0;i<led_array_3_len;i++) {
		P2 = led_array_3[led_array_3_len-1-i];
		delay_ms(350);
	}
	// for 4
	for(i=0;i<led_array_4_len;i++) {
		P2 = led_array_4[i];
		delay_ms(400);
	}
	// for 5
	for(i=0;i<led_array_5_len;i++) {
		P2 = led_array_5[i];
		delay_ms(450);
	}
	// for shine
	for(j=0;j<5;j++) {
		for(i=0;i<led_array_shine_len;i++) {
			P2 = led_array_shine[i];
			delay_ms(100);
		}
	}
	// stop
	while(1);
}
void delay_ms(unsigned int ms)
{
	unsigned int i = 0;
	unsigned char j=0;
	for(i=0;i<ms;i++)
		for(j=0;j<125;j++);
}
